home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 2
/
AACD 2.iso
/
AACD
/
Magazine
/
GraphicsCards
/
StormMesa
/
src-glu
/
project.s
< prev
next >
Wrap
Text File
|
1998-12-15
|
26KB
|
1,428 lines
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src-glu/project.c
mc68030
mc68881
XREF _fabs__r
XREF _memcpy
XREF _std__in
XREF _std__out
XREF _std__err
SECTION "_transform_point:0",CODE
;static void transform_point( GLdouble out[4], const GLdouble m[16],
_transform_point
movem.l a2/a3,-(a7)
fmovem.x fp2,-(a7)
move.l $20(a7),a0
move.l $1C(a7),a1
move.l $18(a7),a2
L24
; out[0] = M(0,0) * in[0] + M(0,1) * in[1] + M(0,2) * in[2] + M(
fmove.d (a1),fp0
fmul.d (a0),fp0
moveq #$20,d0
add.l a1,d0
move.l d0,a3
fmove.d (a3),fp1
moveq #$8,d0
add.l a0,d0
move.l d0,a3
fmul.d (a3),fp1
fadd.x fp1,fp0
moveq #$40,d0
add.l a1,d0
move.l d0,a3
fmove.d (a3),fp1
moveq #$10,d0
add.l a0,d0
move.l d0,a3
fmul.d (a3),fp1
fadd.x fp1,fp0
moveq #$60,d0
add.l a1,d0
move.l d0,a3
fmove.d (a3),fp1
moveq #$18,d0
add.l a0,d0
move.l d0,a3
fmul.d (a3),fp1
fadd.x fp1,fp0
fmove.d fp0,(a2)
; out[1] = M(1,0) * in[0] + M(1,1) * in[1] + M(1,2) * in[2] + M(
moveq #$8,d0
add.l a1,d0
move.l d0,a3
fmove.d (a3),fp0
fmul.d (a0),fp0
moveq #$28,d0
add.l a1,d0
move.l d0,a3
fmove.d (a3),fp1
moveq #$8,d0
add.l a0,d0
move.l d0,a3
fmul.d (a3),fp1
fadd.x fp1,fp0
moveq #$48,d0
add.l a1,d0
move.l d0,a3
fmove.d (a3),fp1
moveq #$10,d0
add.l a0,d0
move.l d0,a3
fmul.d (a3),fp1
fadd.x fp1,fp0
moveq #$68,d0
add.l a1,d0
move.l d0,a3
fmove.d (a3),fp1
moveq #$18,d0
add.l a0,d0
move.l d0,a3
fmul.d (a3),fp1
fadd.x fp1,fp0
moveq #$8,d0
add.l a2,d0
move.l d0,a3
fmove.d fp0,(a3)
; out[2] = M(2,0) * in[0] + M(2,1) * in[1] + M(2,2) * in[2] + M(
moveq #$10,d0
add.l a1,d0
move.l d0,a3
fmove.d (a3),fp0
fmul.d (a0),fp0
moveq #$30,d0
add.l a1,d0
move.l d0,a3
fmove.d (a3),fp1
moveq #$8,d0
add.l a0,d0
move.l d0,a3
fmul.d (a3),fp1
fadd.x fp1,fp0
moveq #$50,d0
add.l a1,d0
move.l d0,a3
fmove.d (a3),fp1
moveq #$10,d0
add.l a0,d0
move.l d0,a3
fmul.d (a3),fp1
fadd.x fp1,fp0
moveq #$70,d0
add.l a1,d0
move.l d0,a3
fmove.d (a3),fp1
moveq #$18,d0
add.l a0,d0
move.l d0,a3
fmul.d (a3),fp1
fadd.x fp1,fp0
moveq #$10,d0
add.l a2,d0
move.l d0,a3
fmove.d fp0,(a3)
; out[3] = M(3,0) * in[0] + M(3,1) * in[1] + M(3,2) * in[2] + M(
moveq #$18,d0
add.l a1,d0
move.l d0,a3
fmove.d (a3),fp0
fmul.d (a0),fp0
moveq #$38,d0
add.l a1,d0
move.l d0,a3
fmove.d (a3),fp1
moveq #$8,d0
add.l a0,d0
move.l d0,a3
fmul.d (a3),fp1
fadd.x fp1,fp0
moveq #$58,d0
add.l a1,d0
move.l d0,a3
fmove.d (a3),fp1
moveq #$10,d0
add.l a0,d0
move.l d0,a3
fmul.d (a3),fp1
fadd.x fp1,fp0
fmove.d $78(a1),fp1
fmul.d $18(a0),fp1
fadd.x fp1,fp0
fmove.d fp0,$18(a2)
fmovem.x (a7)+,fp2
movem.l (a7)+,a2/a3
rts
SECTION "_matmul:0",CODE
rts
;static void matmul( GLdouble *product, const GLdouble *a, const GLdo
_matmul
L29 EQU -$84
link a5,#L29
movem.l a2/a3,-(a7)
fmovem.x fp2,-(a7)
move.l $10(a5),a0
move.l $C(a5),a1
move.l $8(a5),a3
L25
; for (i = 0;
moveq #0,d0
bra L27
L26
; T(i, 0) = A(i, 0) * B(0, 0) + A(i, 1) * B(1, 0) + A(i, 2) *
fmove.d 0(a1,d0.l*8),fp0
fmul.d (a0),fp0
lea $20(a1),a2
fmove.d 0(a2,d0.l*8),fp1
fmul.d $8(a0),fp1
fadd.x fp1,fp0
lea $40(a1),a2
fmove.d 0(a2,d0.l*8),fp1
fmul.d $10(a0),fp1
fadd.x fp1,fp0
lea $60(a1),a2
fmove.d 0(a2,d0.l*8),fp1
fmul.d $18(a0),fp1
fadd.x fp1,fp0
lea -$80(a5),a2
fmove.d fp0,0(a2,d0.l*8)
; T(i, 1) = A(i, 0) * B(0, 1) + A(i, 1) * B(1, 1) + A(i, 2) *
fmove.d 0(a1,d0.l*8),fp0
fmul.d $20(a0),fp0
lea $20(a1),a2
fmove.d 0(a2,d0.l*8),fp1
fmul.d $28(a0),fp1
fadd.x fp1,fp0
lea $40(a1),a2
fmove.d 0(a2,d0.l*8),fp1
fmul.d $30(a0),fp1
fadd.x fp1,fp0
lea $60(a1),a2
fmove.d 0(a2,d0.l*8),fp1
fmul.d $38(a0),fp1
fadd.x fp1,fp0
lea -$80(a5),a2
lea $20(a2),a2
fmove.d fp0,0(a2,d0.l*8)
; T(i, 2) = A(i, 0) * B(0, 2) + A(i, 1) * B(1, 2) + A(i, 2) *
fmove.d 0(a1,d0.l*8),fp0
fmul.d $40(a0),fp0
lea $20(a1),a2
fmove.d 0(a2,d0.l*8),fp1
fmul.d $48(a0),fp1
fadd.x fp1,fp0
lea $40(a1),a2
fmove.d 0(a2,d0.l*8),fp1
fmul.d $50(a0),fp1
fadd.x fp1,fp0
lea $60(a1),a2
fmove.d 0(a2,d0.l*8),fp1
fmul.d $58(a0),fp1
fadd.x fp1,fp0
lea -$80(a5),a2
lea $40(a2),a2
fmove.d fp0,0(a2,d0.l*8)
; T(i, 3) = A(i, 0) * B(0, 3) + A(i, 1) * B(1, 3) + A(i, 2) *
fmove.d 0(a1,d0.l*8),fp0
fmul.d $60(a0),fp0
lea $20(a1),a2
fmove.d 0(a2,d0.l*8),fp1
fmul.d $68(a0),fp1
fadd.x fp1,fp0
lea $40(a1),a2
fmove.d 0(a2,d0.l*8),fp1
fmul.d $70(a0),fp1
fadd.x fp1,fp0
lea $60(a1),a2
fmove.d 0(a2,d0.l*8),fp1
fmul.d $78(a0),fp1
fadd.x fp1,fp0
lea -$80(a5),a2
lea $60(a2),a2
fmove.d fp0,0(a2,d0.l*8)
addq.l #1,d0
L27
cmp.l #4,d0
blt L26
L28
; MEMCPY( product, te
pea $80.w
pea -$80(a5)
move.l a3,-(a7)
jsr _memcpy
add.w #$C,a7
fmovem.x (a7)+,fp2
movem.l (a7)+,a2/a3
unlk a5
rts
SECTION "_Identity:1",DATA
_Identity
dc.l $3FF00000,0,0,0,0,0,0,0,0,0,$3FF00000,0
dc.l 0,0,0,0,0,0,0,0,$3FF00000,0,0,0
dc.l 0,0,0,0,0,0,$3FF00000,0
SECTION "_invert_matrix:0",CODE
;static GLboolean invert_matrix( const GLdouble *m, GLdouble *out )
_invert_matrix
L68 EQU -$150
link a5,#L68
movem.l a2-a4,-(a7)
fmovem.x fp2/fp3/fp4/fp5,-(a7)
move.l $8(a5),a0
L31
; r0 = wtmp[0], r1 = wtmp[1], r2 = wtmp[2], r3 = wtmp[3];
lea -$100(a5),a1
move.l a1,-$12C(a5)
lea -$100(a5),a1
moveq #$40,d0
add.l a1,d0
move.l d0,-$130(a5)
lea -$100(a5),a1
lea $80(a1),a2
lea -$100(a5),a1
move.l #$C0,d0
add.l a1,d0
move.l d0,a4
; r0[0] = MAT(m,0,0), r0[1] = MAT(m,0,1),
fmove.d (a0),fp0
move.l -$12C(a5),a1
fmove.d fp0,(a1)
move.l -$12C(a5),a3
move.l $20(a0),$8(a3)
move.l $24(a0),$C(a3)
move.l -$12C(a5),a3
move.l $40(a0),$10(a3)
move.l $44(a0),$14(a3)
move.l -$12C(a5),a3
move.l $60(a0),$18(a3)
move.l $64(a0),$1C(a3)
move.l -$12C(a5),a3
move.l #$3FF00000,$20(a3)
clr.l $24(a3)
move.l -$12C(a5),a3
clr.l $38(a3)
clr.l $3C(a3)
move.l -$12C(a5),a3
clr.l $30(a3)
clr.l $34(a3)
move.l -$12C(a5),a3
clr.l $28(a3)
clr.l $2C(a3)
move.l -$130(a5),a1
move.l $8(a0),(a1)
move.l $C(a0),4(a1)
move.l -$130(a5),a3
move.l $28(a0),$8(a3)
move.l $2C(a0),$C(a3)
move.l -$130(a5),a3
move.l $48(a0),$10(a3)
move.l $4C(a0),$14(a3)
move.l -$130(a5),a3
move.l $68(a0),$18(a3)
move.l $6C(a0),$1C(a3)
move.l -$130(a5),a3
move.l #$3FF00000,$28(a3)
clr.l $2C(a3)
move.l -$130(a5),a3
clr.l $38(a3)
clr.l $3C(a3)
move.l -$130(a5),a3
clr.l $30(a3)
clr.l $34(a3)
move.l -$130(a5),a3
clr.l $20(a3)
clr.l $24(a3)
move.l $10(a0),(a2)
move.l $14(a0),4(a2)
move.l $30(a0),$8(a2)
move.l $34(a0),$C(a2)
move.l $50(a0),$10(a2)
move.l $54(a0),$14(a2)
move.l $70(a0),$18(a2)
move.l $74(a0),$1C(a2)
move.l #$3FF00000,$30(a2)
clr.l $34(a2)
clr.l $38(a2)
clr.l $3C(a2)
clr.l $28(a2)
clr.l $2C(a2)
clr.l $20(a2)
clr.l $24(a2)
move.l a4,a1
move.l $18(a0),(a1)
move.l $1C(a0),4(a1)
move.l $38(a0),$8(a4)
move.l $3C(a0),$C(a4)
move.l $58(a0),$10(a4)
move.l $5C(a0),$14(a4)
fmove.d $78(a0),fp0
fmove.d fp0,$18(a4)
move.l #$3FF00000,$38(a4)
clr.l $3C(a4)
clr.l $30(a4)
clr.l $34(a4)
clr.l $28(a4)
clr.l $2C(a4)
clr.l $20(a4)
clr.l $24(a4)
; if (fabs(r3[0])>fabs(r2[0])) SWAP_ROWS(r3, r2)
move.l a4,a0
fmove.d (a0),fp0
fmove.d fp0,-(a7)
jsr _fabs__r
fmove.x fp0,fp2
addq.w #$8,a7
move.l 4(a2),-(a7)
move.l 0(a2),-(a7)
jsr _fabs__r
addq.w #$8,a7
fcmp.x fp0,fp2
fbole.b L33
L32
; if (fabs(r3[0])>fabs(
move.l a4,a0
; if (fabs(r3[0])>fabs(
move.l a2,a4
; if (fabs(r3[0])>fabs(
move.l a0,a2
L33
; if (fabs(r2[0])>fabs(r1[0])) SWAP_ROWS(r2, r1)
move.l 4(a2),-(a7)
move.l 0(a2),-(a7)
jsr _fabs__r
fmove.x fp0,fp2
addq.w #$8,a7
move.l -$130(a5),a0
fmove.d (a0),fp0
fmove.d fp0,-(a7)
jsr _fabs__r
addq.w #$8,a7
fcmp.x fp0,fp2
fbole.b L35
L34
; if (fabs(r2[0])>fabs(
move.l a2,a0
; if (fabs(r2[0])>fabs(
move.l -$130(a5),a2
; if (fabs(r2[0])>fabs(
move.l a0,-$130(a5)
L35
; if (fabs(r1[0])>fabs(r0[0])) SWAP_ROWS(r1, r0)
move.l -$130(a5),a0
fmove.d (a0),fp0
fmove.d fp0,-(a7)
jsr _fabs__r
fmove.x fp0,fp2
addq.w #$8,a7
move.l -$12C(a5),a0
fmove.d (a0),fp0
fmove.d fp0,-(a7)
jsr _fabs__r
addq.w #$8,a7
fcmp.x fp0,fp2
fbole.b L37
L36
; if (fabs(r1[0])>fabs(
move.l -$130(a5),a0
; if (fabs(r1[0])>fabs(
move.l -$12C(a5),-$130(a5)
; if (fabs(r1[0])>fabs(
move.l a0,-$12C(a5)
L37
; if (0.0 == r0[0])
move.l -$12C(a5),a0
fmove.d (a0),fp0
ftst.d fp0
fbne.b L39
L38
moveq #0,d0
fmovem.x (a7)+,fp2/fp3/fp4/fp5
movem.l (a7)+,a2-a4
unlk a5
rts
L39
; m1 = r1[0]/r0[0];
move.l -$130(a5),a0
fmove.d (a0),fp3
move.l -$12C(a5),a0
fmove.d (a0),fp0
fdiv.x fp0,fp3
; m2 = r2[0]/r0[0];
fmove.d (a2),fp2
move.l -$12C(a5),a0
fmove.d (a0),fp0
fdiv.x fp0,fp2
; m3 = r3[0]/r0[0];
move.l a4,a0
fmove.d (a0),fp1
move.l -$12C(a5),a0
fmove.d (a0),fp0
fdiv.x fp0,fp1
; s = r0[1];
move.l -$12C(a5),a1
fmove.d $8(a1),fp0
; r1[1] -= m1 * s;
fmove.x fp3,fp5
fmul.x fp0,fp5
move.l -$130(a5),a1
lea $8(a1),a0
fmove.d (a0),fp4
fsub.x fp5,fp4
fmove.d fp4,(a0)
; r2[1] -= m2 * s;
fmove.x fp2,fp5
fmul.x fp0,fp5
lea $8(a2),a0
fmove.d (a0),fp4
fsub.x fp5,fp4
fmove.d fp4,(a0)
; r3[1] -= m3 * s;
fmove.x fp1,fp4
fmul.x fp0,fp4
lea $8(a4),a0
fmove.d (a0),fp0
fsub.x fp4,fp0
fmove.d fp0,(a0)
; s = r0[2];
move.l -$12C(a5),a1
fmove.d $10(a1),fp0
; r1[2] -= m1 * s;
fmove.x fp3,fp5
fmul.x fp0,fp5
move.l -$130(a5),a1
lea $10(a1),a0
fmove.d (a0),fp4
fsub.x fp5,fp4
fmove.d fp4,(a0)
; r2[2] -= m2 * s;
fmove.x fp2,fp5
fmul.x fp0,fp5
lea $10(a2),a0
fmove.d (a0),fp4
fsub.x fp5,fp4
fmove.d fp4,(a0)
; r3[2] -= m3 * s;
fmove.x fp1,fp4
fmul.x fp0,fp4
lea $10(a4),a0
fmove.d (a0),fp0
fsub.x fp4,fp0
fmove.d fp0,(a0)
; s = r0[3];
move.l -$12C(a5),a1
fmove.d $18(a1),fp0
; r1[3] -= m1 * s;
fmove.x fp3,fp5
fmul.x fp0,fp5
move.l -$130(a5),a1
lea $18(a1),a0
fmove.d (a0),fp4
fsub.x fp5,fp4
fmove.d fp4,(a0)
; r2[3] -= m2 * s;
fmove.x fp2,fp5
fmul.x fp0,fp5
lea $18(a2),a0
fmove.d (a0),fp4
fsub.x fp5,fp4
fmove.d fp4,(a0)
; r3[3] -= m3 * s;
fmove.x fp1,fp4
fmul.x fp0,fp4
lea $18(a4),a0
fmove.d (a0),fp0
fsub.x fp4,fp0
fmove.d fp0,(a0)
; s = r0[4];
move.l -$12C(a5),a1
fmove.d $20(a1),fp0
; if (s != 0.0)
ftst.d fp0
fbeq.b L41
L40
; r1[4] -= m1 * s;
fmove.x fp3,fp5
fmul.x fp0,fp5
move.l -$130(a5),a1
lea $20(a1),a0
fmove.d (a0),fp4
fsub.x fp5,fp4
fmove.d fp4,(a0)
; r2[4] -= m2 * s;
fmove.x fp2,fp5
fmul.x fp0,fp5
lea $20(a2),a0
fmove.d (a0),fp4
fsub.x fp5,fp4
fmove.d fp4,(a0)
; r3[4] -= m3 * s;
fmove.x fp1,fp4
fmul.x fp0,fp4
lea $20(a4),a0
fmove.d (a0),fp0
fsub.x fp4,fp0
fmove.d fp0,(a0)
L41
; s = r0[5];
move.l -$12C(a5),a1
fmove.d $28(a1),fp0
; if (s != 0.0)
ftst.d fp0
fbeq.b L43
L42
; r1[5] -= m1 * s;
fmove.x fp3,fp5
fmul.x fp0,fp5
move.l -$130(a5),a1
lea $28(a1),a0
fmove.d (a0),fp4
fsub.x fp5,fp4
fmove.d fp4,(a0)
; r2[5] -= m2 * s;
fmove.x fp2,fp5
fmul.x fp0,fp5
lea $28(a2),a0
fmove.d (a0),fp4
fsub.x fp5,fp4
fmove.d fp4,(a0)
; r3[5] -= m3 * s;
fmove.x fp1,fp4
fmul.x fp0,fp4
lea $28(a4),a0
fmove.d (a0),fp0
fsub.x fp4,fp0
fmove.d fp0,(a0)
L43
; s = r0[6];
move.l -$12C(a5),a1
fmove.d $30(a1),fp0
; if (s != 0.0)
ftst.d fp0
fbeq.b L45
L44
; r1[6] -= m1 * s;
fmove.x fp3,fp5
fmul.x fp0,fp5
move.l -$130(a5),a1
lea $30(a1),a0
fmove.d (a0),fp4
fsub.x fp5,fp4
fmove.d fp4,(a0)
; r2[6] -= m2 * s;
fmove.x fp2,fp5
fmul.x fp0,fp5
lea $30(a2),a0
fmove.d (a0),fp4
fsub.x fp5,fp4
fmove.d fp4,(a0)
; r3[6] -= m3 * s;
fmove.x fp1,fp4
fmul.x fp0,fp4
lea $30(a4),a0
fmove.d (a0),fp0
fsub.x fp4,fp0
fmove.d fp0,(a0)
L45
; s = r0[7];
move.l -$12C(a5),a1
fmove.d $38(a1),fp0
; if (s != 0.0)
ftst.d fp0
fbeq.b L47
L46
; r1[7] -= m1 * s;
fmul.x fp0,fp3
move.l -$130(a5),a1
lea $38(a1),a0
fmove.d (a0),fp4
fsub.x fp3,fp4
fmove.d fp4,(a0)
; r2[7] -= m2 * s;
fmul.x fp0,fp2
lea $38(a2),a0
fmove.d (a0),fp3
fsub.x fp2,fp3
fmove.d fp3,(a0)
; r3[7] -= m3 * s;
fmul.x fp0,fp1
lea $38(a4),a0
fmove.d (a0),fp0
fsub.x fp1,fp0
fmove.d fp0,(a0)
L47
; if (fabs(r3[1])>fabs(r2[1])) SWAP_ROWS(r3, r2)
move.l $C(a4),-(a7)
move.l $8(a4),-(a7)
jsr _fabs__r
fmove.x fp0,fp2
addq.w #$8,a7
move.l $C(a2),-(a7)
move.l $8(a2),-(a7)
jsr _fabs__r
addq.w #$8,a7
fcmp.x fp0,fp2
fbole.b L49
L48
; if (fabs(r3[1])>fabs(
move.l a4,a0
; if (fabs(r3[1])>fabs(
move.l a2,a4
; if (fabs(r3[1])>fabs(
move.l a0,a2
L49
; if (fabs(r2[1])>fabs(r1[1])) SWAP_ROWS(r2, r1)
move.l $C(a2),-(a7)
move.l $8(a2),-(a7)
jsr _fabs__r
fmove.x fp0,fp2
addq.w #$8,a7
move.l -$130(a5),a1
move.l $C(a1),-(a7)
move.l $8(a1),-(a7)
jsr _fabs__r
addq.w #$8,a7
fcmp.x fp0,fp2
fbole.b L51
L50
; if (fabs(r2[1])>fabs(
move.l a2,a0
; if (fabs(r2[1])>fabs(
move.l -$130(a5),a2
; if (fabs(r2[1])>fabs(
move.l a0,-$130(a5)
L51
; if (0.0 == r1[1])
move.l -$130(a5),a1
ftst.d $8(a1)
fbne.b L53
L52
moveq #0,d0
fmovem.x (a7)+,fp2/fp3/fp4/fp5
movem.l (a7)+,a2-a4
unlk a5
rts
L53
; m2 = r2[1]/r1[1];
move.l -$130(a5),a1
fmove.d $8(a2),fp2
fdiv.d $8(a1),fp2
; m3 = r3[1]/r1[1];
move.l -$130(a5),a1
fmove.d $8(a4),fp1
fdiv.d $8(a1),fp1
; r2[2] -= m2 * r1[2];
move.l -$130(a5),a1
fmove.x fp2,fp3
fmul.d $10(a1),fp3
lea $10(a2),a0
fmove.d (a0),fp0
fsub.x fp3,fp0
fmove.d fp0,(a0)
; r3[2] -= m3 * r1[2];
move.l -$130(a5),a1
fmove.x fp1,fp3
fmul.d $10(a1),fp3
lea $10(a4),a0
fmove.d (a0),fp0
fsub.x fp3,fp0
fmove.d fp0,(a0)
; r2[3] -= m2 * r1[3];
move.l -$130(a5),a1
fmove.x fp2,fp3
fmul.d $18(a1),fp3
lea $18(a2),a0
fmove.d (a0),fp0
fsub.x fp3,fp0
fmove.d fp0,(a0)
; r3[3] -= m3 * r1[3];
move.l -$130(a5),a1
fmove.x fp1,fp3
fmul.d $18(a1),fp3
lea $18(a4),a0
fmove.d (a0),fp0
fsub.x fp3,fp0
fmove.d fp0,(a0)
; s = r1[4];
move.l -$130(a5),a1
fmove.d $20(a1),fp0
; if (0.0 != s)
ftst.d fp0
fbeq.b L55
L54
; r2[4] -= m2 * s;
fmove.x fp2,fp4
fmul.x fp0,fp4
lea $20(a2),a0
fmove.d (a0),fp3
fsub.x fp4,fp3
fmove.d fp3,(a0)
; r3[4] -= m3 * s;
fmove.x fp1,fp3
fmul.x fp0,fp3
lea $20(a4),a0
fmove.d (a0),fp0
fsub.x fp3,fp0
fmove.d fp0,(a0)
L55
; s = r1[5];
move.l -$130(a5),a1
fmove.d $28(a1),fp0
; if (0.0 != s)
ftst.d fp0
fbeq.b L57
L56
; r2[5] -= m2 * s;
fmove.x fp2,fp4
fmul.x fp0,fp4
lea $28(a2),a0
fmove.d (a0),fp3
fsub.x fp4,fp3
fmove.d fp3,(a0)
; r3[5] -= m3 * s;
fmove.x fp1,fp3
fmul.x fp0,fp3
lea $28(a4),a0
fmove.d (a0),fp0
fsub.x fp3,fp0
fmove.d fp0,(a0)
L57
; s = r1[6];
move.l -$130(a5),a1
fmove.d $30(a1),fp0
; if (0.0 != s)
ftst.d fp0
fbeq.b L59
L58
; r2[6] -= m2 * s;
fmove.x fp2,fp4
fmul.x fp0,fp4
lea $30(a2),a0
fmove.d (a0),fp3
fsub.x fp4,fp3
fmove.d fp3,(a0)
; r3[6] -= m3 * s;
fmove.x fp1,fp3
fmul.x fp0,fp3
lea $30(a4),a0
fmove.d (a0),fp0
fsub.x fp3,fp0
fmove.d fp0,(a0)
L59
; s = r1[7];
move.l -$130(a5),a1
fmove.d $38(a1),fp0
; if (0.0 != s)
ftst.d fp0
fbeq.b L61
L60
; r2[7] -= m2 * s;
fmul.x fp0,fp2
lea $38(a2),a0
fmove.d (a0),fp3
fsub.x fp2,fp3
fmove.d fp3,(a0)
; r3[7] -= m3 * s;
fmul.x fp0,fp1
lea $38(a4),a0
fmove.d (a0),fp0
fsub.x fp1,fp0
fmove.d fp0,(a0)
L61
; if (fabs(r3[2])>fabs(r2[2])) SWAP_ROWS(r3, r2)
move.l $14(a4),-(a7)
move.l $10(a4),-(a7)
jsr _fabs__r
fmove.x fp0,fp2
addq.w #$8,a7
move.l $14(a2),-(a7)
move.l $10(a2),-(a7)
jsr _fabs__r
addq.w #$8,a7
fcmp.x fp0,fp2
fbole.b L63
L62
; if (fabs(r3[2])>fabs(
move.l a4,a0
; if (fabs(r3[2])>fabs(
move.l a2,a4
; if (fabs(r3[2])>fabs(
move.l a0,a2
L63
; if (0.0 == r2[2])
ftst.d $10(a2)
fbne.b L65
L64
moveq #0,d0
fmovem.x (a7)+,fp2/fp3/fp4/fp5
movem.l (a7)+,a2-a4
unlk a5
rts
L65
; m3 = r3[2]/r2[2];
fmove.d $10(a4),fp1
fdiv.d $10(a2),fp1
; r3[3] -= m3 * r2[3], r3[4] -= m3 * r2[4],
fmove.x fp1,fp2
fmul.d $18(a2),fp2
lea $18(a4),a0
fmove.d (a0),fp0
fsub.x fp2,fp0
fmove.d fp0,(a0)
fmove.x fp1,fp2
fmul.d $20(a2),fp2
lea $20(a4),a0
fmove.d (a0),fp0
fsub.x fp2,fp0
fmove.d fp0,(a0)
fmove.x fp1,fp2
fmul.d $28(a2),fp2
lea $28(a4),a0
fmove.d (a0),fp0
fsub.x fp2,fp0
fmove.d fp0,(a0)
fmove.x fp1,fp2
fmul.d $30(a2),fp2
lea $30(a4),a0
fmove.d (a0),fp0
fsub.x fp2,fp0
fmove.d fp0,(a0)
fmul.d $38(a2),fp1
lea $38(a4),a0
fmove.d (a0),fp0
fsub.x fp1,fp0
fmove.d fp0,(a0)
; if (0.0 == r3[3])
ftst.d $18(a4)
fbne.b L67
L66
moveq #0,d0
fmovem.x (a7)+,fp2/fp3/fp4/fp5
movem.l (a7)+,a2-a4
unlk a5
rts
L67
; s = 1.0/r3[3];
fmove.d #$.3FF00000.00000000,fp0
fdiv.d $18(a4),fp0
; r3[4] *= s;
lea $20(a4),a0
fmove.d (a0),fp1
fmul.x fp0,fp1
fmove.d fp1,(a0)
; r3[5] *= s;
lea $28(a4),a0
fmove.d (a0),fp1
fmul.x fp0,fp1
fmove.d fp1,(a0)
; r3[6] *= s;
lea $30(a4),a0
fmove.d (a0),fp1
fmul.x fp0,fp1
fmove.d fp1,(a0)
; r3[7] *= s;
lea $38(a4),a0
fmove.d (a0),fp1
fmul.x fp0,fp1
fmove.d fp1,(a0)
; m2 = r2[3];
fmove.d $18(a2),fp2
; s = 1.0/r2[2];
fmove.d #$.3FF00000.00000000,fp0
fdiv.d $10(a2),fp0
; r2[4] = s * (r2[4] - r3[4] * m2), r2[5] = s * (r2[5] - r3[5] * m2)
fmove.d $20(a4),fp3
fmul.x fp2,fp3
fmove.d $20(a2),fp1
fsub.x fp3,fp1
fmul.x fp0,fp1
fmove.d fp1,$20(a2)
fmove.d $28(a4),fp3
fmul.x fp2,fp3
fmove.d $28(a2),fp1
fsub.x fp3,fp1
fmul.x fp0,fp1
fmove.d fp1,$28(a2)
fmove.d $30(a4),fp3
fmul.x fp2,fp3
fmove.d $30(a2),fp1
fsub.x fp3,fp1
fmul.x fp0,fp1
fmove.d fp1,$30(a2)
fmove.d $38(a4),fp3
fmul.x fp2,fp3
fmove.d $38(a2),fp1
fsub.x fp3,fp1
fmul.x fp1,fp0
fmove.d fp0,$38(a2)
; m1 = r1[3];
move.l -$130(a5),a1
fmove.d $18(a1),fp3
; r1[4] -= r3[4] * m1, r1[5] -= r3[5] * m1,
fmove.d $20(a4),fp1
fmul.x fp3,fp1
move.l -$130(a5),a1
lea $20(a1),a0
fmove.d (a0),fp0
fsub.x fp1,fp0
fmove.d fp0,(a0)
fmove.d $28(a4),fp1
fmul.x fp3,fp1
move.l -$130(a5),a1
lea $28(a1),a0
fmove.d (a0),fp0
fsub.x fp1,fp0
fmove.d fp0,(a0)
fmove.d $30(a4),fp1
fmul.x fp3,fp1
move.l -$130(a5),a1
lea $30(a1),a0
fmove.d (a0),fp0
fsub.x fp1,fp0
fmove.d fp0,(a0)
fmove.d $38(a4),fp1
fmul.x fp3,fp1
move.l -$130(a5),a1
lea $38(a1),a0
fmove.d (a0),fp0
fsub.x fp1,fp0
fmove.d fp0,(a0)
; m0 = r0[3];
move.l -$12C(a5),a1
fmove.d $18(a1),fp1
; r0[4] -= r3[4] * m0, r0[5] -= r3[5] * m0,
fmove.d $20(a4),fp2
fmul.x fp1,fp2
move.l -$12C(a5),a1
lea $20(a1),a0
fmove.d (a0),fp0
fsub.x fp2,fp0
fmove.d fp0,(a0)
fmove.d $28(a4),fp2
fmul.x fp1,fp2
move.l -$12C(a5),a1
lea $28(a1),a0
fmove.d (a0),fp0
fsub.x fp2,fp0
fmove.d fp0,(a0)
fmove.d $30(a4),fp2
fmul.x fp1,fp2
move.l -$12C(a5),a1
lea $30(a1),a0
fmove.d (a0),fp0
fsub.x fp2,fp0
fmove.d fp0,(a0)
fmove.d $38(a4),fp2
fmul.x fp1,fp2
move.l -$12C(a5),a1
lea $38(a1),a0
fmove.d (a0),fp0
fsub.x fp2,fp0
fmove.d fp0,(a0)
; m1 = r1[2];
move.l -$130(a5),a1
fmove.d $10(a1),fp3
; s = 1.0/r1[1];
move.l -$130(a5),a1
fmove.d #$.3FF00000.00000000,fp0
fdiv.d $8(a1),fp0
; r1[4] = s * (r1[4] - r2[4] * m1), r1[5] = s * (r1[5] - r2[5] * m1)
move.l -$130(a5),a1
fmove.d $20(a2),fp2
fmul.x fp3,fp2
fmove.d $20(a1),fp1
fsub.x fp2,fp1
fmul.x fp0,fp1
move.l -$130(a5),a1
fmove.d fp1,$20(a1)
move.l -$130(a5),a1
fmove.d $28(a2),fp2
fmul.x fp3,fp2
fmove.d $28(a1),fp1
fsub.x fp2,fp1
fmul.x fp0,fp1
move.l -$130(a5),a1
fmove.d fp1,$28(a1)
move.l -$130(a5),a1
fmove.d $30(a2),fp2
fmul.x fp3,fp2
fmove.d $30(a1),fp1
fsub.x fp2,fp1
fmul.x fp0,fp1
move.l -$130(a5),a1
fmove.d fp1,$30(a1)
move.l -$130(a5),a1
fmove.d $38(a2),fp2
fmul.x fp3,fp2
fmove.d $38(a1),fp1
fsub.x fp2,fp1
fmul.x fp1,fp0
move.l -$130(a5),a1
fmove.d fp0,$38(a1)
; m0 = r0[2];
move.l -$12C(a5),a1
fmove.d $10(a1),fp1
; r0[4] -= r2[4] * m0, r0[5] -= r2[5] * m0,
fmove.d $20(a2),fp2
fmul.x fp1,fp2
move.l -$12C(a5),a1
lea $20(a1),a0
fmove.d (a0),fp0
fsub.x fp2,fp0
fmove.d fp0,(a0)
fmove.d $28(a2),fp2
fmul.x fp1,fp2
move.l -$12C(a5),a1
lea $28(a1),a0
fmove.d (a0),fp0
fsub.x fp2,fp0
fmove.d fp0,(a0)
fmove.d $30(a2),fp2
fmul.x fp1,fp2
move.l -$12C(a5),a1
lea $30(a1),a0
fmove.d (a0),fp0
fsub.x fp2,fp0
fmove.d fp0,(a0)
fmove.d $38(a2),fp2
fmul.x fp1,fp2
move.l -$12C(a5),a1
lea $38(a1),a0
fmove.d (a0),fp0
fsub.x fp2,fp0
fmove.d fp0,(a0)
; m0 = r0[1];
move.l -$12C(a5),a1
fmove.d $8(a1),fp1
; s = 1.0/r0[0];
move.l -$12C(a5),a0
fmove.d (a0),fp0
fmove.d #$.3FF00000.00000000,fp2
fdiv.x fp0,fp2
fmove.x fp2,fp0
; r0[4] = s * (r0[4] - r1[4] * m0), r0[5] = s * (r0[5] - r1[5] * m0)
move.l -$12C(a5),a1
fmove.d $20(a1),fp2
move.l -$130(a5),a1
fmove.d $20(a1),fp3
fmul.x fp1,fp3
fsub.x fp3,fp2
fmul.x fp0,fp2
move.l -$12C(a5),a1
fmove.d fp2,$20(a1)
move.l -$12C(a5),a1
fmove.d $28(a1),fp2
move.l -$130(a5),a1
fmove.d $28(a1),fp3
fmul.x fp1,fp3
fsub.x fp3,fp2
fmul.x fp0,fp2
move.l -$12C(a5),a1
fmove.d fp2,$28(a1)
move.l -$12C(a5),a1
fmove.d $30(a1),fp2
move.l -$130(a5),a1
fmove.d $30(a1),fp3
fmul.x fp1,fp3
fsub.x fp3,fp2
fmul.x fp0,fp2
move.l -$12C(a5),a1
fmove.d fp2,$30(a1)
move.l -$12C(a5),a1
fmove.d $38(a1),fp2
move.l -$130(a5),a1
fmove.d $38(a1),fp3
fmul.x fp1,fp3
fsub.x fp3,fp2
fmul.x fp2,fp0
move.l -$12C(a5),a1
fmove.d fp0,$38(a1)
; MAT(out,0,0) = r0[4];
move.l -$12C(a5),a1
move.l $C(a5),a0
move.l $20(a1),(a0)
move.l $24(a1),4(a0)
; MAT(out,0,1) = r0[5],
move.l -$12C(a5),a1
fmove.d $28(a1),fp0
move.l $C(a5),a1
fmove.d fp0,$20(a1)
move.l -$12C(a5),a1
fmove.d $30(a1),fp0
move.l $C(a5),a1
fmove.d fp0,$40(a1)
; MAT(out,0,3) = r0[7],
move.l -$12C(a5),a1
fmove.d $38(a1),fp0
move.l $C(a5),a1
fmove.d fp0,$60(a1)
move.l -$130(a5),a1
fmove.d $20(a1),fp0
move.l $C(a5),a1
fmove.d fp0,$8(a1)
; MAT(out,1,1) = r1[5],
move.l -$130(a5),a1
fmove.d $28(a1),fp0
move.l $C(a5),a1
fmove.d fp0,$28(a1)
move.l -$130(a5),a1
fmove.d $30(a1),fp0
move.l $C(a5),a1
fmove.d fp0,$48(a1)
; MAT(out,1,3) = r1[7],
move.l -$130(a5),a1
fmove.d $38(a1),fp0
move.l $C(a5),a1
fmove.d fp0,$68(a1)
move.l $C(a5),a1
move.l $20(a2),$10(a1)
move.l $24(a2),$14(a1)
; MAT(out,2,1) = r2[5],
move.l $C(a5),a1
move.l $28(a2),$30(a1)
move.l $2C(a2),$34(a1)
move.l $C(a5),a1
move.l $30(a2),$50(a1)
move.l $34(a2),$54(a1)
; MAT(out,2,3) = r2[7],
move.l $C(a5),a1
move.l $38(a2),$70(a1)
move.l $3C(a2),$74(a1)
move.l $C(a5),a1
move.l $20(a4),$18(a1)
move.l $24(a4),$1C(a1)
; MAT(out,3,1) = r3[5],
move.l $C(a5),a1
move.l $28(a4),$38(a1)
move.l $2C(a4),$3C(a1)
move.l $C(a5),a1
move.l $30(a4),$58(a1)
move.l $34(a4),$5C(a1)
; MAT(out,3,3) = r3[7];
move.l $C(a5),a1
move.l $38(a4),$78(a1)
move.l $3C(a4),$7C(a1)
moveq #1,d0
fmovem.x (a7)+,fp2/fp3/fp4/fp5
movem.l (a7)+,a2-a4
unlk a5
rts
SECTION "_gluProject:0",CODE
;GLint APIENTRY gluProject(GLdouble objx,GLdouble objy,GLdouble objz,
XDEF _gluProject
_gluProject
L72 EQU -$40
link a5,#L72
movem.l a2-a4,-(a7)
fmovem.x fp2,-(a7)
move.l $20(a5),a1
move.l $28(a5),a2
move.l $34(a5),a3
move.l $30(a5),a4
fmove.d $18(a5),fp0
fmove.d $10(a5),fp1
fmove.d $8(a5),fp2
L69
; in[0]=objx;
fmove.d fp2,-$20(a5)
; in[1]=objy;
lea -$20(a5),a0
fmove.d fp1,$8(a0)
; in[2]=objz;
lea -$20(a5),a0
fmove.d fp0,$10(a0)
; in[3]=1.0;
lea -$20(a5),a0
move.l #$3FF00000,$18(a0)
clr.l $1C(a0)
; transform_point(out,model,in);
pea -$20(a5)
move.l a1,-(a7)
pea -$40(a5)
jsr _transform_point
add.w #$C,a7
; transform_point(in,proj,out);
pea -$40(a5)
move.l $24(a5),-(a7)
pea -$20(a5)
jsr _transform_point
add.w #$C,a7
; if (in[3]==0.0)
lea -$20(a5),a0
ftst.d $18(a0)
fbne.b L71
L70
moveq #0,d0
fmovem.x (a7)+,fp2
movem.l (a7)+,a2-a4
unlk a5
rts
L71
; in[0]/=in[3];
lea -$20(a5),a0
fmove.d $18(a0),fp1
lea -$20(a5),a0
fmove.d (a0),fp0
fdiv.x fp1,fp0
fmove.d fp0,(a0)
; in[1]/=in[3];
lea -$20(a5),a0
fmove.d $18(a0),fp1
lea -$20(a5),a0
addq.w #$8,a0
fmove.d (a0),fp0
fdiv.x fp1,fp0
fmove.d fp0,(a0)
; in[2]/=in[3];
lea -$20(a5),a0
fmove.d $18(a0),fp1
lea -$20(a5),a0
add.w #$10,a0
fmove.d (a0),fp0
fdiv.x fp1,fp0
fmove.d fp0,(a0)
; *winx = viewport[0]+(1+in[0])*viewport[2]/2;
fmove.l (a2),fp1
fmove.d -$20(a5),fp0
fadd.d #$.3FF00000.00000000,fp0
fmove.l $8(a2),fp2
fmul.x fp2,fp0
fdiv.d #$.40000000.00000000,fp0
fadd.x fp0,fp1
move.l $2C(a5),a0
fmove.d fp1,(a0)
; *winy = viewport[1]+(1+in[1])*viewport[3]/2;
fmove.l 4(a2),fp1
lea -$20(a5),a0
fmove.d $8(a0),fp0
fadd.d #$.3FF00000.00000000,fp0
fmove.l $C(a2),fp2
fmul.x fp2,fp0
fdiv.d #$.40000000.00000000,fp0
fadd.x fp0,fp1
move.l a4,a0
fmove.d fp1,(a0)
; *winz = (1+in[2])/2;
lea -$20(a5),a0
fmove.d $10(a0),fp0
fadd.d #$.3FF00000.00000000,fp0
fdiv.d #$.40000000.00000000,fp0
move.l a3,a0
fmove.d fp0,(a0)
moveq #1,d0
fmovem.x (a7)+,fp2
movem.l (a7)+,a2-a4
unlk a5
rts
SECTION "_gluUnProject:0",CODE
;GLint APIENTRY gluUnProject(GLdouble winx,GLdouble winy,GLdouble win
XDEF _gluUnProject
_gluUnProject
L76 EQU -$140
link a5,#L76
movem.l a2-a4,-(a7)
fmovem.x fp2/fp3,-(a7)
movem.l $28(a5),a0/a4
move.l $34(a5),a2
move.l $30(a5),a3
fmove.d $10(a5),fp0
fmove.d $8(a5),fp1
fmove.d $18(a5),fp3
L73
; in[0]=(winx-viewport[0])*2/viewport[2] - 1.0;
fmove.l (a0),fp2
fsub.x fp2,fp1
fmul.d #$.40000000.00000000,fp1
fmove.l $8(a0),fp2
fdiv.x fp2,fp1
fsub.d #$.3FF00000.00000000,fp1
fmove.d fp1,-$120(a5)
; in[1]=(winy-viewport[1])*2/viewport[3] - 1.0;
fmove.l 4(a0),fp1
fsub.x fp1,fp0
fmul.d #$.40000000.00000000,fp0
fmove.l $C(a0),fp1
fdiv.x fp1,fp0
fsub.d #$.3FF00000.00000000,fp0
lea -$120(a5),a0
fmove.d fp0,$8(a0)
; in[2]=2*winz - 1.0;
fmove.x fp3,fp0
fmul.d #$.40000000.00000000,fp0
fsub.d #$.3FF00000.00000000,fp0
lea -$120(a5),a0
fmove.d fp0,$10(a0)
; in[3]=1.0;
lea -$120(a5),a0
move.l #$3FF00000,$18(a0)
clr.l $1C(a0)
; matmul(A,proj,model);
move.l $20(a5),-(a7)
move.l $24(a5),-(a7)
pea -$100(a5)
jsr _matmul
add.w #$C,a7
; invert_matrix(A,m);
pea -$80(a5)
pea -$100(a5)
jsr _invert_matrix
addq.w #$8,a7
; transform_point(out,m,in);
pea -$120(a5)
pea -$80(a5)
pea -$140(a5)
jsr _transform_point
add.w #$C,a7
; if (out[3]==0.0)
lea -$140(a5),a0
ftst.d $18(a0)
fbne.b L75
L74
moveq #0,d0
fmovem.x (a7)+,fp2/fp3
movem.l (a7)+,a2-a4
unlk a5
rts
L75
; *objx=out[0]/out[3];
lea -$140(a5),a0
fmove.d -$140(a5),fp0
fdiv.d $18(a0),fp0
move.l a4,a0
fmove.d fp0,(a0)
; *objy=out[1]/out[3];
lea -$140(a5),a0
fmove.d $8(a0),fp0
lea -$140(a5),a0
fdiv.d $18(a0),fp0
move.l a3,a0
fmove.d fp0,(a0)
; *objz=out[2]/out[3];
lea -$140(a5),a0
fmove.d $10(a0),fp0
lea -$140(a5),a0
fdiv.d $18(a0),fp0
fmove.d fp0,(a2)
moveq #1,d0
fmovem.x (a7)+,fp2/fp3
movem.l (a7)+,a2-a4
unlk a5
rts
END